import { NextRequest, NextResponse } from 'next/server'
import prisma from '@/lib/prisma'
import { getUser } from '@/lib/authUtils'
import bcrypt from 'bcryptjs'

// 修改密码
export async function PUT(request: NextRequest) {
  try {
    const userid = await getUser(request)
    if (!userid) {
      return NextResponse.json({ error: '未授权访问' }, { status: 401 })
    }
    if (userid instanceof NextResponse) {
      return userid
    }

    const body = await request.json()
    const { currentPassword, newPassword } = body

    // 验证输入
    if (!currentPassword || !newPassword) {
      return NextResponse.json({ error: '请提供当前密码和新密码' }, { status: 400 })
    }

    if (newPassword.length < 6) {
      return NextResponse.json({ error: '新密码长度至少为6位' }, { status: 400 })
    }

    // 获取用户当前密码
    const user = await prisma.vms_user.findUnique({
      where: { id: userid },
      select: { id: true, password: true }
    })

    if (!user) {
      return NextResponse.json({ error: '用户不存在' }, { status: 404 })
    }

    if (!user.password) {
      return NextResponse.json({ error: '用户密码未设置，请联系管理员' }, { status: 400 })
    }

    // 验证当前密码
    const isCurrentPasswordValid = await bcrypt.compare(currentPassword, user.password)
    if (!isCurrentPasswordValid) {
      return NextResponse.json({ error: '当前密码不正确' }, { status: 400 })
    }

    // 检查新密码是否与当前密码相同
    const isSamePassword = await bcrypt.compare(newPassword, user.password)
    if (isSamePassword) {
      return NextResponse.json({ error: '新密码不能与当前密码相同' }, { status: 400 })
    }

    // 加密新密码 - 使用与登录接口相同的加密方式
    const saltRounds = 12
    const hashedNewPassword = await bcrypt.hash(newPassword, saltRounds)

    // 更新密码和密码修改时间
    await prisma.vms_user.update({
      where: { id: userid },
      data: { 
        password: hashedNewPassword,
        last_password_change_request: new Date()
      }
    })

    return NextResponse.json({ message: '密码修改成功' })
  } catch (error) {
    console.error('修改密码失败:', error)
    return NextResponse.json({ error: '服务器错误' }, { status: 500 })
  }
}